package com.lga.algorithm;

import com.sun.org.apache.bcel.internal.generic.NEW;

/**
 * 8. 字符串转换整数 (atoi)
 *
 * @autor lga
 */
public class MYAtoi {

    private static final int MAX_VALUE = Integer.MAX_VALUE;

    private static final int MIN_VALUE = Integer.MIN_VALUE;

    public int myAtoi(String str) {
        //最终的数字
        int resultNum = 0;
        double temp = 0;
        //是否为负数，1位正数，-1为负数
        int flag = 1;
        str = str.trim();

        if (str == null || str == "" || str.length() == 0||!isCorrectNumber(str)) {
            return 0;
        }
        //判断字符串中是否含有+符号
        if (str.contains("+")) {
            str = str.replace("+", "");
        }
        //判断字符串中是否含有负数符号
        if (str.contains("-")) {
            flag = -1;
            str = str.replace("-", "");
        }
        if (str.length() != 0) {
            str = getNumberFromString(str);
        }
        if (isNumeric(str) && str.length() != 0) {
            temp = Double.parseDouble(str);
            if (flag == 1) {
                resultNum = MAX_VALUE <= temp*flag ? MAX_VALUE : (int) temp*flag;
            } else {
                resultNum = MIN_VALUE >= temp*flag  ? MIN_VALUE  : (int) temp*flag;

            }
        } else {//如果字符串中不为数字，则直接反问0
            return resultNum;
        }

        return resultNum;
    }

    /**
     * 判断该字符串是否为数字
     *
     * @param str
     * @return
     */
    public static boolean isNumeric(String str) {
        for (int i = str.length(); --i >= 0; ) {
            if (!Character.isDigit(str.charAt(i))) {
                return false;
            }
        }
        return true;
    }

    /**
     * 将一个字符串的前几个为数字的字符串抽取出来
     * @param str
     * @return
     */
    public static String getNumberFromString(String str) {

        int endIndex = 0;
        for (int i = 0,j=1; i < str.length(); i++) {
            if (Character.isDigit(str.charAt(i)) && j++ == i + 1) {
                endIndex = i;
            } else {
                break;
            }
        }
        return str.substring(0, endIndex+1);
    }

    /**
     * 判断当前字符串的第一个字符中第一个字符是否为+ -符号
     * @param str
     * @return
     */
    public static boolean isCorrectNumber(String str) {
        str = str.trim();
        if (str.contains("+") && str.substring(0, 1).equals("+")&&!str.contains("-")) {
            return true;
        }
        if (str.contains("-") && str.substring(0, 1).equals("-")&&!str.contains("+")) {
            return true;
        }
        if (!(str.contains("+") || str.contains("-"))) {
            return true;
        }

        return false;
    }
    public static void main(String[] args) {
       // System.out.println(new MYAtoi().myAtoi("42"));
        System.out.println(isCorrectNumber("0-1"));

    }

}
